package main

import "fmt"

type B interface {
	test2()
}

type C interface {
	test3()
}

type D interface {
	B
	C
	test4()
}

type Dog5 struct {
}

func (dog Dog5) test2() {
	fmt.Println("test2")
}
func (dog Dog5) test3() {
	fmt.Println("test3")
}

func (dog Dog5) test4() {
	fmt.Println("test4")
}

func main() {
	dog := Dog5{}
	dog.test2()
	dog.test3()
	dog.test4()

	//再接口嵌套中，嵌套的接口默认继承了被嵌套接口的所有方法
	//将dog赋值给接口 该接口只能调用自己的方法
	var b1 B = dog
	b1.test2()

	//由于d是继承了 B和C 所以他还是可以调用里面的方法
	var d1 D = dog
	d1.test4()
	d1.test3()
	d1.test2()
}
